package com.yeren.list.arrayList;

import java.util.ArrayList;
import java.util.List;

/**
 * 1.求两个集合的交集、并集、差集
 * 
 * 
 * @author liubiao
 */
public class ListDemo3 {
	public static void main(String[] args) {
		// 新建两个集合
		List<String> list1 = new ArrayList<String>();
		List<String> list2 = new ArrayList<String>();

		// 给集合1添加元素
		list1.add("a");
		list1.add("b");
		list1.add("c");
		list1.add("d");
		list1.add("e");
		// 给集合2添加元素
		list2.add("a");
		list2.add("b");
		list2.add("c");
		list2.add("f");
		
		//新建存放三个结果集的集合
		List<String> l1 = jiaoji(list1, list2);
		List<String> l2 = bingji(list1, list2);
		List<String> l3 = chaji(list1, list2);
		
		//打印交集
		System.out.print("交集：");
		for (int i = 0; i < l1.size(); i++) {
			System.out.print(l1.get(i));
		}
		System.out.println();
		
		//打印并集
		System.out.print("并集：");
		for (int i = 0; i < l2.size(); i++) {
			System.out.print(l2.get(i));
		}
		System.out.println();
		
		
		//打印差集
		System.out.print("差集：");
		
		for (int i = 0; i < l3.size(); i++) {
			System.out.print(l3.get(i));
		}
	}

	/**
	 * 交集
	 * @param list1
	 * @param list2
	 * @return
	 */
	public static List<String> jiaoji(List<String> list1, List<String> list2) {
		List<String> result = new ArrayList<String>();
		result.clear();
		result.addAll(list1);
		result.retainAll(list2);
		return result;
	}

	/**
	 * 差集
	 * @param list1
	 * @param list2
	 * @return
	 */
	public static List<String> chaji(List<String> list1, List<String> list2) {
		List<String> result = new ArrayList<String>();
		result.clear();
		result.addAll(list1);
		//list1减去list2
		result.removeAll(list2);
		return result;
	}
	
	/**
	 * 并集
	 * @param list1
	 * @param list2
	 * @return
	 */
	public static List<String> bingji(List<String> list1, List<String> list2) {
		List<String> result = new ArrayList<String>();
		result.clear();
		//result集合分为三部分：交集+list1与交集的差集+list2与交集的差集
		//得到list1与list2交集
		result.addAll(jiaoji(list1, list2));
		//得到list1与交集的差集
		result.addAll(chaji(list1, jiaoji(list1, list2)));
		//得到list2与交集的差集
		result.addAll(chaji(list2, jiaoji(list1, list2)));
		return result;
	}

}
